A distributed application, or service, is composed of many components running on different computer nodes in a network. Components in a distributed system communicate by sending messages. The message size affects overall network performance by consuming network resources and available bandwidth, and thus limiting the throughput of the network. Because of this, many distributed systems employ methods to increase the information density and reduce the size of transferred messages.
One solution to reduce message sizes employs compression technology. Useful non-image based message compression techniques are generally lossless, so that the original content of the messages are received. Lossless compression techniques are exquisitely sensitive to internal redundancy in a message and often compress data only by 10–20%. Lossy compression techniques may be employed to improve compression ratios. Examples of lossy compression techniques are JPEG/MPEG compression techniques. JPEG/MPEG compression techniques may be applied to data that is arranged in frames (e.g., frames of video pictures). To compress a message containing multiple frames, JPEG/MPEG compression techniques use prior frames to reduce the amount of information necessary to represent subsequent frames. These techniques are capable of compression ratios much greater than ten. However, JPEG/MPEG compression technology is lossy (i.e., the decoded message is not identical to the original message), and thus is unsuitable for certain applications that require lossless messaging. In addition, the use of JPEG/MPEG compression requires sending image data in a predetermined image format. While JPEG and MPEG do use prior state information to reduce encoding of subsequent frames, these techniques are lossy (i.e., information is usually lost in encoding) and are employed for image data A windowing protocol for TCP/IP uses prior state information as a failure mechanism. In this protocol, a party (e.g., client) sends messages, organized into packets, to a second party (e.g., server), and the server sends an acknowledgement to identify those bytes received (i.e., the server identifies the window of bytes received). For example, the client may send 10 bytes of a message to a server, and the server may acknowledge, to the client, receiving a portion of the message. For this example, the client sends only the unreceived portion of the message to the server to recover from the failure as opposed to the entire message. However, in the windowing protocol, prior state information is only used to identify bytes not received or recovered at the receiving party.
There is therefore a need in the art for an improved method for sending messages suitable for business applications. As described herein, the messaging system of the present invention: (1) reduces the size of messages sent so as to increase message throughput; (2) yields a high compression ratio; and (3) reproduces the original uncompressed message at the receiver.